<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // 沙箱
		// 与外界隔绝的一个环境,外界无法修改该环境内任何信息,
		// 沙箱内的东西属于一个世界
		
		// 360沙箱模式
		// 将软件和操作系统进行隔离,以达到安全的目的
		
		// 苹果手机的app使用的就是沙箱模式去运行
		// 隔离app空间,每个app独立运行
		
		// JS中的沙箱模式
		// 沙箱模式的基本模型
		
		// (function () {
		// 	var a = 123;
		// })();
		
		var sum = 0;
		for (var i = 1; i <= 100; i++) {
			sum += i;
		}
		console.log(sum);
		var a = 123;
		(function(){
			// 在沙箱中将所有变量的定义放在最上方
			// 中间就放一些逻辑代码
			// 最后,如果需要,就给外界暴露一些成员(通过window)
			var sum = 0;
			for(var i = 1; i <= 100; i++) {
				sum += 1;
			}
			console.log(sum);
		})();
		
		// 为什么要使用立即执行函数表达式(IIFE)
		// 因为IIFE不会在外界暴露任何的全局变量,但是又可以形成一个封闭的空间
		// 刚好可以实现沙箱模式
		
		
		// jQuery中的沙箱模式
		(function(win){
			var itcast = {
				getEle: function() {
					
				}
			}
			// 如果需要在外界暴露一些属性或者方法,就可以将这些属性和方法
			// 加到window全局对象上去
			// 但是这window全局对象不可以直接引用,因为直接引用会破坏沙箱原则
			// 所以我们选择使用传参的形式将 window对象传入沙箱内
			// 此时沙箱内使用window对象的时候,不会再去全局搜索window对象
			// 而使用的寄宿沙箱内部的形参
			
			win.itCast = win.$ = itcast;
			
			
		})(window);
		
		// 沙箱模式一般应用在书写第三方框架
		// 或者为第三方框架书写插件
		// 或者书写功能独立的一些组件
		
		// 沙箱模式的优势
		// 1.沙箱模式使用的是IIFE,不会在外界暴露任河的全局变量,也就不会
		// 造成全局变量污染
		// 2.沙箱中的所有数据,都是和外界完全隔离的,外界无法对其进行修改,也就保证了
		// 代码的安全性
		
		// js中的沙箱模式的实现原理就是
		// 函数可以构建作用域!上级作用域不能直接访问下级作用域中的数据
		
		
    </script>
</head>
<body>

</body>
</html>